package com.yuan.blog.config;

import com.yuan.blog.interceptor.TokenInterceptor;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.client.RestTemplate;
import org.springframework.web.servlet.config.annotation.CorsRegistry;
import org.springframework.web.servlet.config.annotation.InterceptorRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;

/**
 * @program: blog-system
 * @description:
 * @author: yuan_boss
 * @create: 2022-12-23 10:54
 **/

/**
 * 因为 父类WebMvcConfigurationSupport 重写了 extendMessageConverters 方法
 * 覆盖了原方法.导致了 配置文件中的该配置失效  #所有数字返回给前端的时候,都转成字符串 spring.jackson.generator.write-numbers-as-strings=true
 * 所以此处,我们自己重写 extendMessageConverters 方法
 */
@Configuration
public class WebConfig implements WebMvcConfigurer {
//    /**
//     * 扩展MVC框架的消息转换器.请求数据返回的结果,在返回给前端之前进行一次转换.
//     *
//     * @param converters
//     */
//    @Override
//    public void extendMessageConverters(List<HttpMessageConverter<?>> converters) {
//        //创建消息转换器对象
//        MappingJackson2HttpMessageConverter myConverter = new MappingJackson2HttpMessageConverter();
//        //设置对象转换器,底层使用Jackson将Java对象转为Json
//        myConverter.setObjectMapper(new JacksonObjectMapper());
//        converters.add(0, myConverter);
//    }


    @Autowired
    private TokenInterceptor tokenInterceptor;

//    @Bean
//    public RestTemplate restTemplate(){
//        return new RestTemplate();
//    }

    @Override
    public void addInterceptors(InterceptorRegistry registry) {
        registry.addInterceptor(tokenInterceptor)
                .addPathPatterns("/**")
                .excludePathPatterns("/system/login")
                .excludePathPatterns("/swagger-ui.html")
                .excludePathPatterns("/webjars/**")
                .excludePathPatterns("/v2/**")
                .excludePathPatterns("/swagger-resources/**");
    }

    @Override
    public void addCorsMappings(CorsRegistry registry) {
        registry.addMapping("/**")//请求映射路径
                .allowedMethods("*")//任意请求方式
                .allowedOrigins("*")//任意域名都可以请求
                .allowedHeaders("*")//请求头中可以携带任意的参数
                .maxAge(3600);
    }
}
